﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OneDimentionArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            string ch;
            do
            {
                Console.Clear();
                Console.WriteLine("Используйте клавиши для выбора задачи.");
                Console.WriteLine("1 - Задача 'Максимальный элемент в массиве'");
                Console.WriteLine("2 - Задача 'Количество элементов, отличающихся от минимального на 5'");
                Console.WriteLine("3 - Задача 'Сумма элементов массива, находящихся до максимального элемента'");
                Console.WriteLine("4 - Задача 'Значение и номер последнего отрицательного значения в массиве'");
                Console.WriteLine("5 - Задача 'Замена элементов массива, следующих за максимальным элементом, на среднее значение'");

                int choose;
                choose = Int32.Parse(Console.ReadLine());

                switch (choose)
                {
                    case 1:
                        MaxElementOfArray();
                        break;
                    case 2:
                        ElemetsBiggerThenMinElement();
                        break;
                    case 3:
                        SumOfElementsBeforeMaxVal();
                        break;
                    case 4:
                        LastNegativeElementOfArray();
                        break;
                    case 5:
                        AverageValAfterMax();
                        break;
                    default:
                        Console.WriteLine("Неверный ввод!");
                        break;
                }
                Console.WriteLine("Хотите продолжить? y/n");
                ch = Console.ReadLine().ToLower();
            } while (ch == "y");

        }

        static void MaxElementOfArray()
        {
            Console.WriteLine("Введите массив, состоящий из 5 элементов:");
            int maxElement = int.MinValue;
            int[] intArray = new int[5];
            for (int i = 0; i < 5; i++)
            {
                Console.Write("[{0}]", i);
                intArray[i] = Int32.Parse(Console.ReadLine());
                if (intArray[i] > maxElement)
                    maxElement = intArray[i];

            }
            Console.Clear();
            Console.WriteLine("Элементы массива: ");
            foreach (int number in intArray)
            {
                Console.WriteLine(number);

            }
            Console.WriteLine("Максимальный элемент массива: {0}", maxElement);
        }

        static void ElemetsBiggerThenMinElement()
        {

            int minElement = int.MaxValue;

            int countOfElementsMinValPlusFive = 0;
            Console.WriteLine("Введите размер массива:");
            int arraySize = Int32.Parse(Console.ReadLine());
            int[] intArray = new int[arraySize];
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}]", i);
                intArray[i] = Int32.Parse(Console.ReadLine());
                if (intArray[i] < minElement)
                    minElement = intArray[i];
            }
            Console.Clear();
            Console.WriteLine("Элементы массива: ");
            foreach (int number in intArray)
            {
                Console.WriteLine(number);
                int minElementPlusFive = minElement + 5;
                if (number == minElementPlusFive)
                    countOfElementsMinValPlusFive++;
            }
            Console.WriteLine("Минимальный элемент массива: {0}", minElement);
            Console.WriteLine("Количество элементов массива, отличающихся от минимального значения на 5: {0}", countOfElementsMinValPlusFive);
        }

        static void SumOfElementsBeforeMaxVal()

        {
            Console.Clear();
            int maxElement = int.MinValue;
            int sumOfElementsBeforeMaxVal = 0;
            Console.WriteLine("Введите размер массива:");
            int arraySize = Int32.Parse(Console.ReadLine());
            int[] intArray = new int[arraySize];
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}]", i);
                intArray[i] = Int32.Parse(Console.ReadLine());
                if (intArray[i] > maxElement)
                    maxElement = intArray[i];
            }

            int j = 0;
            do
            {

                if (intArray[j] == maxElement)
                {
                    break;
                }
                sumOfElementsBeforeMaxVal = sumOfElementsBeforeMaxVal + intArray[j];
                j++;
            } while (j < arraySize);

            Console.WriteLine("Максимальный элемент массива: {0}", maxElement);
            Console.WriteLine("Сумма элементов массива, находящихся до максимального элемента: {0}", sumOfElementsBeforeMaxVal);

        }
        static void LastNegativeElementOfArray()
        {
            Console.Clear();

            int lastNegativeElement = 0;
            int elementPosition = -1;
            Console.WriteLine("Enter elements of the Array:");
            int[] intArray = new int[8];
            for (int i = 0; i < 8; i++)
            {
                Console.Write("[{0}]: ", i);
                intArray[i] = Int32.Parse(Console.ReadLine());
                if (intArray[i] < 0)
                {
                    elementPosition = i;
                    lastNegativeElement = intArray[i];
                }
            }
            Console.Clear();
            if (elementPosition == -1)
            {
                Console.WriteLine("No negative elements in the Array!");
            }
                Console.WriteLine("Last negavive element in the Array: {0}", lastNegativeElement);
                Console.WriteLine("Position of the last negstive element in the Array: [{0}]", elementPosition);
        }

        static void AverageValAfterMax()
        {
            int maxElement=0;
            int maxElementPosition = -1;
            Console.WriteLine("Введите размер массива:");
            int arraySize = Int32.Parse(Console.ReadLine());
            int[] intArray = FillArrayFromConsole(arraySize);
            Console.Clear();
            for (int i = 0; i < arraySize; i++)
            {
                if (intArray[i] == intArray.Max())
                {
                    maxElementPosition = i;
                    maxElement = intArray.Max();
                }
            }
            double[] newArray = new double[arraySize];
            for (int i = 0; i<arraySize; i++)
            {
                newArray[i] = intArray[i];
            }
            for (int i = (maxElementPosition+1); i < arraySize; i++)
            {
                 newArray[i] = intArray.Average();
            }
            Console.WriteLine("Elements after max element was changed to average value: ");
            PrintDoubleArray(newArray);
        }

        static int[] FillArrayFromConsole(int arraySize)
        {
            int[] array = new int[arraySize];
            for (int i = 0; i < arraySize; i++)
            {
                Console.Write("[{0}]: ", i);
                array[i] = Int32.Parse(Console.ReadLine());
            }
            return array;
        }

        static void PrintDoubleArray (double [] array)
        {
            foreach (var item in array)
            {
                Console.WriteLine("Element of the Array: {0}", item);
            }
        }

        static void PrintIntArray (int [] array)
        {
            foreach (var item in array)
            {
                Console.WriteLine("item in new: {0}", item);
            }
        }
    }
}
